/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package SubsistemaPaciente.Fichas;

import clienteSandraParada.Login;
import java.awt.Color;
import java.awt.Component;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import service.HeuristicMixedException_Exception;
import service.HeuristicRollbackException_Exception;
import service.SystemException_Exception;

/**
 *
 * @author Jacqueline
 */
public class PanelKine extends javax.swing.JPanel {
    static Long id;
    static int fila;
    FichaKine fichaKine;

    /**
     * Creates new form ContenidoCaja
     */
    public PanelKine() {
        initComponents();
        if(Login.getUser().getTipoCuenta().equals("Administrador")||Login.getUser().getTipoCuenta().equals("Secretaria")){
            cargarTodasLasFichas((java.util.List<service.FichaClinica>) listarFichas());
        }
        else{
            cargarFichas((java.util.List<service.FichaClinica>) listarFichas());
        }
        this.ocultarNumeroFicha();
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        dialogoEliminarFicha = new javax.swing.JDialog();
        jPanel8 = new javax.swing.JPanel();
        etiquetaEliminar = new javax.swing.JLabel();
        jLabel20 = new javax.swing.JLabel();
        botonSiEliminar = new javax.swing.JButton();
        botonNoEliminar = new javax.swing.JButton();
        jPanel5 = new javax.swing.JPanel();
        jLabel4 = new javax.swing.JLabel();
        jScrollPane4 = new javax.swing.JScrollPane();
        tablaFichasKine = new javax.swing.JTable();
        datosABuscar = new javax.swing.JTextField();
        jPanel6 = new javax.swing.JPanel();
        etiquetaMensajeria = new javax.swing.JLabel();
        jPanel7 = new javax.swing.JPanel();
        botonModificar = new javax.swing.JButton();
        botonEliminar = new javax.swing.JButton();
        botonVer = new javax.swing.JButton();

        dialogoEliminarFicha.setTitle("Eliminar paciente");
        dialogoEliminarFicha.setMinimumSize(new java.awt.Dimension(527, 190));
        dialogoEliminarFicha.setModal(true);
        dialogoEliminarFicha.setResizable(false);

        etiquetaEliminar.setText("¿Confirma que desea enviar a la papelera la ficha seleccionada?");

        jLabel20.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Img/Iconos35X35/Papelera.png"))); // NOI18N

        javax.swing.GroupLayout jPanel8Layout = new javax.swing.GroupLayout(jPanel8);
        jPanel8.setLayout(jPanel8Layout);
        jPanel8Layout.setHorizontalGroup(
            jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel8Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel20)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(etiquetaEliminar)
                .addContainerGap(28, Short.MAX_VALUE))
        );
        jPanel8Layout.setVerticalGroup(
            jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel8Layout.createSequentialGroup()
                .addGap(40, 40, 40)
                .addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel20)
                    .addGroup(jPanel8Layout.createSequentialGroup()
                        .addGap(9, 9, 9)
                        .addComponent(etiquetaEliminar)))
                .addContainerGap(24, Short.MAX_VALUE))
        );

        botonSiEliminar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Img/Iconos16X16/Aceptar.png"))); // NOI18N
        botonSiEliminar.setText("Si");
        botonSiEliminar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonSiEliminarActionPerformed(evt);
            }
        });

        botonNoEliminar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Img/Iconos16X16/Cancelar.png"))); // NOI18N
        botonNoEliminar.setText("No");
        botonNoEliminar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonNoEliminarActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout dialogoEliminarFichaLayout = new javax.swing.GroupLayout(dialogoEliminarFicha.getContentPane());
        dialogoEliminarFicha.getContentPane().setLayout(dialogoEliminarFichaLayout);
        dialogoEliminarFichaLayout.setHorizontalGroup(
            dialogoEliminarFichaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel8, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, dialogoEliminarFichaLayout.createSequentialGroup()
                .addContainerGap(212, Short.MAX_VALUE)
                .addComponent(botonSiEliminar, javax.swing.GroupLayout.PREFERRED_SIZE, 78, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(botonNoEliminar, javax.swing.GroupLayout.PREFERRED_SIZE, 78, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );
        dialogoEliminarFichaLayout.setVerticalGroup(
            dialogoEliminarFichaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(dialogoEliminarFichaLayout.createSequentialGroup()
                .addComponent(jPanel8, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(dialogoEliminarFichaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(botonSiEliminar)
                    .addComponent(botonNoEliminar))
                .addGap(0, 15, Short.MAX_VALUE))
        );

        setPreferredSize(new java.awt.Dimension(953, 603));

        jPanel5.setBackground(new java.awt.Color(255, 255, 255));
        jPanel5.setBorder(javax.swing.BorderFactory.createTitledBorder(javax.swing.BorderFactory.createEmptyBorder(1, 1, 1, 1), "Fichas Kinesiología", javax.swing.border.TitledBorder.CENTER, javax.swing.border.TitledBorder.TOP, new java.awt.Font("Tahoma", 0, 36))); // NOI18N

        jLabel4.setText("Buscar ");

        tablaFichasKine.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "ID", "Rut ", "Nombre", "Diagnostico", "Patologias", "Tratamiento"
            }
        ) {
            Class[] types = new Class [] {
                java.lang.Long.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class, java.lang.String.class
            };
            boolean[] canEdit = new boolean [] {
                false, false, false, false, false, false
            };

            public Class getColumnClass(int columnIndex) {
                return types [columnIndex];
            }

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        tablaFichasKine.getTableHeader().setReorderingAllowed(false);
        tablaFichasKine.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tablaFichasKineMouseClicked(evt);
            }
        });
        jScrollPane4.setViewportView(tablaFichasKine);

        datosABuscar.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyReleased(java.awt.event.KeyEvent evt) {
                datosABuscarKeyReleased(evt);
            }
        });

        javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5);
        jPanel5.setLayout(jPanel5Layout);
        jPanel5Layout.setHorizontalGroup(
            jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel5Layout.createSequentialGroup()
                .addGap(728, 728, 728)
                .addComponent(jLabel4)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(datosABuscar, javax.swing.GroupLayout.PREFERRED_SIZE, 176, javax.swing.GroupLayout.PREFERRED_SIZE))
            .addComponent(jScrollPane4)
        );
        jPanel5Layout.setVerticalGroup(
            jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel5Layout.createSequentialGroup()
                .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel4)
                    .addComponent(datosABuscar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jScrollPane4, javax.swing.GroupLayout.DEFAULT_SIZE, 363, Short.MAX_VALUE)
                .addGap(59, 59, 59))
        );

        jPanel6.setBackground(new java.awt.Color(255, 255, 255));

        etiquetaMensajeria.setText("Área de mensajería");

        javax.swing.GroupLayout jPanel6Layout = new javax.swing.GroupLayout(jPanel6);
        jPanel6.setLayout(jPanel6Layout);
        jPanel6Layout.setHorizontalGroup(
            jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel6Layout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(etiquetaMensajeria, javax.swing.GroupLayout.PREFERRED_SIZE, 333, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(288, 288, 288))
        );
        jPanel6Layout.setVerticalGroup(
            jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(etiquetaMensajeria, javax.swing.GroupLayout.DEFAULT_SIZE, 27, Short.MAX_VALUE)
        );

        jPanel7.setBackground(new java.awt.Color(255, 255, 255));

        botonModificar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Img/Iconos35X35/Edit.png"))); // NOI18N
        botonModificar.setText("Modificar");
        botonModificar.setMargin(new java.awt.Insets(2, 4, 2, 6));
        botonModificar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonModificarActionPerformed(evt);
            }
        });

        botonEliminar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Img/Iconos35X35/delete_32x32x32.png"))); // NOI18N
        botonEliminar.setText("Eliminar");
        botonEliminar.setMargin(new java.awt.Insets(2, 4, 2, 6));
        botonEliminar.setMaximumSize(new java.awt.Dimension(97, 43));
        botonEliminar.setMinimumSize(new java.awt.Dimension(97, 43));
        botonEliminar.setPreferredSize(new java.awt.Dimension(97, 43));
        botonEliminar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonEliminarActionPerformed(evt);
            }
        });

        botonVer.setIcon(new javax.swing.ImageIcon(getClass().getResource("/GUI/Img/Iconos35X35/Previsualizar.png"))); // NOI18N
        botonVer.setText("Ver");
        botonVer.setMaximumSize(new java.awt.Dimension(97, 43));
        botonVer.setMinimumSize(new java.awt.Dimension(97, 43));
        botonVer.setPreferredSize(new java.awt.Dimension(97, 43));
        botonVer.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonVerActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel7Layout = new javax.swing.GroupLayout(jPanel7);
        jPanel7.setLayout(jPanel7Layout);
        jPanel7Layout.setHorizontalGroup(
            jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel7Layout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(botonModificar, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(botonEliminar, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(botonVer, javax.swing.GroupLayout.PREFERRED_SIZE, 120, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );

        jPanel7Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {botonEliminar, botonModificar, botonVer});

        jPanel7Layout.setVerticalGroup(
            jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel7Layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(botonEliminar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(botonModificar)
                    .addComponent(botonVer, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap())
        );

        jPanel7Layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {botonEliminar, botonModificar, botonVer});

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jPanel6, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(jPanel7, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
            .addComponent(jPanel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addComponent(jPanel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(jPanel6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
        );
    }// </editor-fold>//GEN-END:initComponents

    private void botonModificarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonModificarActionPerformed
        service.Privilegios p = (service.Privilegios) cargarPrivilegios(Login.getUser().getRut());
        if (p.isModificarFichaKinesiologia()) {
            this.normalizarMensajeria();
            int[] filasSelec = tablaFichasKine.getSelectedRows();
            if (filasSelec.length == 1) {
                fichaKine = new FichaKine(null, true, this);
                fichaKine.LimpiarFormularioFicha();
                fichaKine.setTitle("Modificar Ficha Clinica");
                //Solo puede seleccionar una fila de la tabla de fichas principal
                fila = filasSelec[0];
                fichaKine.fila = filasSelec[0];
                //Devuelve -1 si no esta seleccionada
                Long fi = (Long) this.tablaFichasKine.getValueAt(fila, 0);
                EvolucionKine.ficha = (Long) this.tablaFichasKine.getValueAt(fila, 0);
                service.FichaClinica ficha = buscarFicha(fi);
                /*se guarda el Id para saber que ficha clinica debo modificar
                en la base de datos*/
                fichaKine.id = (Long) this.tablaFichasKine.getValueAt(fila, 0);
                fichaKine.llenarFormularioFichaKine(ficha);
                fichaKine.habilitarCamposFormulario(true);
                //cargar evoluciones
                fichaKine.limpiarTablaEvoluciones();
                fichaKine.configurarBotones("modificar");
                fichaKine.llenardatosEvoluciones(fi);
                fichaKine.ocultarAsteriscosFormulario(false);
                fichaKine.setSize(1100, 643);
                fichaKine.setLocationRelativeTo(null);
                fichaKine.setVisible(true);
            } else {
                this.etiquetaMensajeria.setText("No se ha seleccionado una Ficha a modificar");
                etiquetaMensajeria.setForeground(Color.red);
            }
        } else {
            JOptionPane.showMessageDialog(this, "No tiene permisos para esta acción, \n contacte al administrador para más información");
        }
    }//GEN-LAST:event_botonModificarActionPerformed

    private void botonEliminarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonEliminarActionPerformed
        service.Privilegios p = (service.Privilegios) cargarPrivilegios(Login.getUser().getRut());
        if (p.isEliminarFichaKinesiologia()) {
            //Eliminar Panel principal
            this.normalizarMensajeria();
            int[] filas = tablaFichasKine.getSelectedRows();
            if (filas.length > 0) {
                if (filas.length == 1) {
                    etiquetaEliminar.setText("¿Confirma que desea enviar a la papelera la ficha seleccionada?");
                } else {
                    etiquetaEliminar.setText("¿Confirma que desea enviar a la papelera las fichas seleccionadas?");
                }
                dialogoEliminarFicha.setLocationRelativeTo(null);
                dialogoEliminarFicha.setVisible(true);
            } else {
                etiquetaMensajeria.setText("No se ha seleccionado una ficha para eliminar");
                etiquetaMensajeria.setForeground(Color.red);
            }
        } else {
            JOptionPane.showMessageDialog(this, "No tiene permisos para esta acción, \n contacte al administrador para más información");
        }
    }//GEN-LAST:event_botonEliminarActionPerformed

    private void botonVerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonVerActionPerformed
        service.Privilegios p = (service.Privilegios) cargarPrivilegios(Login.getUser().getRut());
        if (p.isVerFichaKinesiologia()) {
            // ver panel principal
            this.normalizarMensajeria();
            int[] filasSelec = tablaFichasKine.getSelectedRows();
            if (filasSelec.length == 1) {
                fichaKine = new FichaKine(null, true, this);
                fichaKine.LimpiarFormularioFicha();
                fichaKine.setTitle("Ver Ficha Clinica");
                fichaKine.configurarBotones("imprimir");
                //Solo puede seleccionar una fila de la tabla de fichas principal
                fila = filasSelec[0];
                service.FichaClinica ficha = buscarFicha((Long) this.tablaFichasKine.getValueAt(fila, 0));
                /*se guarda el Id para saber que ficha clinica debo modificar
                en la base de datos*/
                fichaKine.id = (Long) this.tablaFichasKine.getValueAt(fila, 0);
                fichaKine.llenarFormularioFichaKine(ficha);
                fichaKine.habilitarCamposFormulario(false);
                fichaKine.habilitarCamposEvolucion(true);
                //llenar datos evoluciones
                fichaKine.limpiarTablaEvoluciones();
                fichaKine.llenardatosEvoluciones((Long) this.tablaFichasKine.getValueAt(fila, 0));
                fichaKine.ocultarAsteriscosFormulario(true);
                fichaKine.setSize(1100, 643);
                fichaKine.setLocationRelativeTo(null);
                fichaKine.setVisible(true);
            } else {
                this.etiquetaMensajeria.setText("Debe seleccionar solo una fila.");
                etiquetaMensajeria.setForeground(Color.red);
            }
        } else {
            JOptionPane.showMessageDialog(this, "No tiene permisos para esta acción, \n contacte al administrador para más información");
        }
    }//GEN-LAST:event_botonVerActionPerformed

    private void botonSiEliminarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonSiEliminarActionPerformed
        //Eliminar las fichas que ha seleccionadas
        int[] filasSelec = tablaFichasKine.getSelectedRows();
        if (filasSelec.length == 1) {
            try {
                service.FichaClinica p = (service.FichaClinica) cargarFichaClinica(((Long) tablaFichasKine.getValueAt(filasSelec[0], 0)));
                p.setActivo(false);
                modificarFicha(p);
                String anterior = "No aplica";
                String posterior = "Rut profesional: " + p.getPaciente() + "\n" + "Rut paciente: " + p.getPaciente() + "\n" + "Diagnóstico: " + p.getDiagnostico();
                registrar(Login.getUser(), "Ficha kinesiología", "Eliminó ficha a profesional:" + p.getProfesional() + "de paciente :" + p.getPaciente(), anterior, posterior);
            } catch (SystemException_Exception ex) {
                Logger.getLogger(PanelKine.class.getName()).log(Level.SEVERE, null, ex);
            } catch (HeuristicRollbackException_Exception ex) {
                Logger.getLogger(PanelKine.class.getName()).log(Level.SEVERE, null, ex);
            } catch (HeuristicMixedException_Exception ex) {
                Logger.getLogger(PanelKine.class.getName()).log(Level.SEVERE, null, ex);
            }
        } else {
            for (int i = 0; i < filasSelec.length; i++) {
                try {
                    service.FichaClinica p = (service.FichaClinica) cargarFichaClinica(((Long) tablaFichasKine.getValueAt(filasSelec[i], 0)));
                    p.setActivo(false);
                    modificarFicha(p);
                    String anterior = "No aplica";
                    String posterior = "Rut profesional: " + p.getPaciente() + "\n" + "Rut paciente: " + p.getPaciente() + "\n" + "Diagnóstico: " + p.getDiagnostico();
                    registrar(Login.getUser(), "Ficha kinesiología", "Eliminó ficha rut profesional" + p.getProfesional(), anterior, posterior);
                } catch (SystemException_Exception ex) {
                    Logger.getLogger(PanelKine.class.getName()).log(Level.SEVERE, null, ex);
                } catch (HeuristicRollbackException_Exception ex) {
                    Logger.getLogger(PanelKine.class.getName()).log(Level.SEVERE, null, ex);
                } catch (HeuristicMixedException_Exception ex) {
                    Logger.getLogger(PanelKine.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
        this.cargarFichas((java.util.List<service.FichaClinica>) listarFichas());
        this.dialogoEliminarFicha.dispose();
}//GEN-LAST:event_botonSiEliminarActionPerformed

    private void botonNoEliminarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonNoEliminarActionPerformed
        this.dialogoEliminarFicha.dispose();
}//GEN-LAST:event_botonNoEliminarActionPerformed

    private void datosABuscarKeyReleased(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_datosABuscarKeyReleased
        service.Privilegios p = (service.Privilegios) cargarPrivilegios(Login.getUser().getRut());
        if (p.isBuscarFichaKinesiologia()) {
           if (!datosABuscar.getText().equals("")) {
                    if(Login.getUser().getTipoCuenta().equals("Administrador")||Login.getUser().getTipoCuenta().equals("Secretaria")){
                        cargarTodasLasFichas((java.util.List<service.FichaClinica>) listarFichas());
                    }
                    else{
                        this.cargarFichas((java.util.List<service.FichaClinica>) listarFichas());
                    }
                    actualizarTablaBusqueda(datosABuscar.getText());
                } else {
                    if(Login.getUser().getTipoCuenta().equals("Administrador")||Login.getUser().getTipoCuenta().equals("Secretaria")){
                        cargarTodasLasFichas((java.util.List<service.FichaClinica>) listarFichas());
                    }
                    else{
                        this.cargarFichas((java.util.List<service.FichaClinica>) listarFichas());
                    }
                }
        } else {
            JOptionPane.showMessageDialog(this, "No tiene permisos para esta acción, \n contacte al administrador para más información");
        }
    }//GEN-LAST:event_datosABuscarKeyReleased

    public void actualizarTablaBusqueda(String buscar) {
        DefaultTableModel temp = (DefaultTableModel) tablaFichasKine.getModel();
        for (int i = 0; i < temp.getRowCount(); i++) {
            if (!contienePalabra(buscar, temp, i)) {
                temp.removeRow(i);
                i--;
            }

        }
    }
    
    public boolean contienePalabra(String buscar, DefaultTableModel temp, int fila) {
        int coincidencias = 0;
        int j = 0;
        String buscarAux = buscar.toUpperCase();
        if (temp.getColumnName(0).equals("ID")) {
            j++;
        }
        for (int i = j; i < temp.getColumnCount(); i++) {
            String frase = (String) temp.getValueAt(fila, i);
            if ((frase.toUpperCase()).contains(buscarAux)) {
                coincidencias += 1; // existe una columna que coincide con la palabra buscada
            }
        }
        if (coincidencias == 0) {
            return false; // no existen coincidencias
        } else {
            return true;
        }
    }
    
    private void tablaFichasKineMouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_tablaFichasKineMouseClicked
        // ver con doble click
         DefaultTableModel modelo = (DefaultTableModel) this.tablaFichasKine.getModel();
        int fila = this.tablaFichasKine.rowAtPoint(evt.getPoint());
        if ((fila > -1) && evt.getClickCount() == 2) {
            // ver panel principal
            this.normalizarMensajeria();
            int[] filasSelec = tablaFichasKine.getSelectedRows();
            if (filasSelec.length == 1) {
                fichaKine = new FichaKine(null, true, this);
                fichaKine.LimpiarFormularioFicha();
                fichaKine.setTitle("Ver Ficha Clinica");
                fichaKine.configurarBotones("imprimir");
                //Solo puede seleccionar una fila de la tabla de fichas principal
                fila = filasSelec[0];
                service.FichaClinica ficha = buscarFicha((Long) this.tablaFichasKine.getValueAt(fila, 0));
                /*se guarda el Id para saber que ficha clinica debo modificar
                en la base de datos*/
                fichaKine.id = (Long) this.tablaFichasKine.getValueAt(fila, 0);
                fichaKine.llenarFormularioFichaKine(ficha);
                fichaKine.habilitarCamposFormulario(false);
                fichaKine.habilitarCamposEvolucion(true);
                //llenar datos evoluciones
                fichaKine.limpiarTablaEvoluciones();
                fichaKine.llenardatosEvoluciones((Long) this.tablaFichasKine.getValueAt(fila, 0));
                fichaKine.ocultarAsteriscosFormulario(true);
                fichaKine.setSize(1100, 643);
                fichaKine.setLocationRelativeTo(null);
                fichaKine.setVisible(true);
            }
            else {
                this.etiquetaMensajeria.setText("Debe seleccionar solo una fila.");
                etiquetaMensajeria.setForeground(Color.red);
            }
        }
    }//GEN-LAST:event_tablaFichasKineMouseClicked

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton botonEliminar;
    private javax.swing.JButton botonModificar;
    private javax.swing.JButton botonNoEliminar;
    private javax.swing.JButton botonSiEliminar;
    private javax.swing.JButton botonVer;
    private javax.swing.JTextField datosABuscar;
    private javax.swing.JDialog dialogoEliminarFicha;
    private javax.swing.JLabel etiquetaEliminar;
    public javax.swing.JLabel etiquetaMensajeria;
    private javax.swing.JLabel jLabel20;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JPanel jPanel5;
    private javax.swing.JPanel jPanel6;
    private javax.swing.JPanel jPanel7;
    private javax.swing.JPanel jPanel8;
    private javax.swing.JScrollPane jScrollPane4;
    public javax.swing.JTable tablaFichasKine;
    // End of variables declaration//GEN-END:variables

    public void cargarFichas(java.util.List<service.FichaClinica> fi) {
        String profesional = Login.getUser().getRut();
        this.limpiarTabla();
        java.util.List<service.FichaClinica> fichas = fi;
        int i = 0;
        for (service.FichaClinica p : fichas) {
            //cargar las fichas clinicas del profesional que ha ingresado al sistema
            if (p.isActivo() && p.getProfesional().equals(profesional)) {
                this.agregarFila();
                tablaFichasKine.setValueAt(p.getId(), i, 0);
                tablaFichasKine.setValueAt(p.getPaciente(), i, 1);
                service.Paciente pro= (service.Paciente) cargarPaciente(p.getPaciente());
                tablaFichasKine.setValueAt(pro.getNombres()+" "+pro.getApellidoPaterno()+" "+pro.getApellidoMaterno(), i, 2);
                tablaFichasKine.setValueAt(p.getDiagnostico(), i, 3);
                tablaFichasKine.setValueAt(p.getPatologia(), i, 4);
                tablaFichasKine.setValueAt(p.getTratamiento(), i, 5);
                i++;
            }
        }
    }

    public void agregarFila() {
        DefaultTableModel temp = (DefaultTableModel) tablaFichasKine.getModel();
        Object nuevo[] = {"", "", "", "", ""};
        temp.addRow(nuevo);
    }

    /**
     * Método que busca un paciente en la base de datos
     * @param rut del paciente a buscar
     * @return Objeto paciente
     **/
    public service.FichaClinica buscarFicha(Long fichaKine) {
        service.FichaKineWSService service = new service.FichaKineWSService();
        service.FichaKineWS port = service.getFichaKineWSPort();

        java.util.List<service.FichaClinica> fichasKine = port.listarFichasClinicas();
        //buscar paciente por el rut
        for (int i = 0; i < fichasKine.size(); i++) {
            if (fichasKine.get(i).getId().equals(fichaKine)) {
                return fichasKine.get(i);
            }
        }
        return null;
    }

    public void limpiarTabla() {
        DefaultTableModel temp = (DefaultTableModel) tablaFichasKine.getModel();
        for (int i = tablaFichasKine.getRowCount() - 1; i >= 0; i--) {
            temp.removeRow(i);
        }
    }

    /**
     * Método que Agrega una ficha clinica a la base de datos
     * @return retorna el id de la ficha clinica agregada
     * @param Long id (indica el id de la ficha clínica),String paciente(indica el rut del paciente al cual se le
     * asocia la ficha clínica), String profesional(indica el rut del profesional con el cual se antiende el paciente),
     * String diagnostico(indica el diagnostico del paciente),String examenes(indica los examenes que se le ha aplicado
     * al paciente),String patologia(indica las patologías previas del paciente),String evaluacion(descripción de la evaluación
     * previa del paciente),String cancelacion(indica la fecha de vencimiento de la ficha clinica),String tratamiento(indica
     * el tratamiento realizado al paciente), String fechaIngreso(indica la fecha de registro del paciente), boolean activo(indica
     * si la ficha clinica esta eliminada)
     **/
    public Long agregarFichaClinicaBD(String paciente, String profesional, String diagnostico, String examenes,
            String patologia, String evaluacion, String cancelacion, String tratamiento, String fechaIngreso, boolean activo, String evaluacionFinal) {
        System.out.println("entra a agregar ficha BD");
        try { // Llamar al Web Service
            service.FichaKineWSService service = new service.FichaKineWSService();
            service.FichaKineWS port = service.getFichaKineWSPort();
            // TODO process result here
            Long idFicha = port.agregarFichaClinica(paciente, profesional, diagnostico, examenes,
                    patologia, evaluacion, cancelacion, tratamiento, fechaIngreso, activo, evaluacionFinal);
            return idFicha;
        } catch (Exception ex) {
            // TODO handle custom exceptions here
        }
        return null;
    }

    private static java.util.List<service.FichaClinica> listarFichas() {
        service.FichaKineWSService service = new service.FichaKineWSService();
        service.FichaKineWS port = service.getFichaKineWSPort();
        return port.listarFichasClinicas();
    }

    public void normalizarMensajeria() {
        etiquetaMensajeria.setText("");
        etiquetaMensajeria.setForeground(Color.black);
    }

    public void cambiarMensajeria(String mensaje) {
        etiquetaMensajeria.setText(mensaje);
    }

    /**
     * Método que modifica los paramétros de una ficha clínica en la base de datos
     * @return no hay retorno
     * @param Long id (indica el id de la ficha clínica),String paciente(indica el rut del paciente al cual se le
     * asocia la ficha clínica), String profesional(indica el rut del profesional con el cual se antiende el paciente),
     * String diagnostico(indica el diagnostico del paciente),String examenes(indica los examenes que se le ha aplicado
     * al paciente),String patologia(indica las patologías previas del paciente),String evaluacion(descripción de la evaluación
     * previa del paciente),String cancelacion(indica la fecha de vencimiento de la ficha clinica),String tratamiento(indica
     * el tratamiento realizado al paciente), String fechaIngreso(indica la fecha de registro del paciente), boolean activo(indica
     * si la ficha clinica esta eliminada)
     **/
    public void modificarFichaClinicaBD(Long id, String paciente, String profesional,
            String diagnostico, String examenes, String patologia, String evaluacion, String cancelacion,
            String tratamiento, String fechaIngreso, boolean activo, String evaluacionFinal) {

        try {
            service.FichaKineWSService service = new service.FichaKineWSService();
            service.FichaKineWS port = service.getFichaKineWSPort();
            boolean resultado = port.modificarFichaClinica(id, paciente, profesional, diagnostico, examenes,
                    patologia, evaluacion, cancelacion, tratamiento, fechaIngreso, activo, evaluacionFinal);
        } catch (Exception ex) {
            // TODO handle custom exceptions here
        }

    }

    private static Object cargarFichaClinica(java.lang.Long id) throws SystemException_Exception, HeuristicRollbackException_Exception, HeuristicMixedException_Exception {
        service.FichaKineWSService service = new service.FichaKineWSService();
        service.FichaKineWS port = service.getFichaKineWSPort();
        return port.cargarFichaClinica(id);
    }

    private static boolean modificarFicha(service.FichaClinica fichaClinica) throws HeuristicRollbackException_Exception, HeuristicMixedException_Exception {
        service.FichaKineWSService service = new service.FichaKineWSService();
        service.FichaKineWS port = service.getFichaKineWSPort();
        return port.modificarFicha(fichaClinica);
    }

    private static java.util.List<service.FichaClinica> filtrarFichas(java.lang.String buscar) {
        service.FichaKineWSService service = new service.FichaKineWSService();
        service.FichaKineWS port = service.getFichaKineWSPort();
        return port.filtrarFichasKine(buscar);
    }

    private static Object cargarPrivilegios(java.lang.String rut) {
        service.PrivilegiosWS_Service service = new service.PrivilegiosWS_Service();
        service.PrivilegiosWS port = service.getPrivilegiosWSPort();
        return port.cargarPrivilegios(rut);
    }

    private static Long registrar(service.Usuario usuario, java.lang.String modulo, java.lang.String accion, java.lang.String valorAnterior, java.lang.String valorNuevo) {
        service.BitacoraWSService service = new service.BitacoraWSService();
        service.BitacoraWS port = service.getBitacoraWSPort();
        return port.registrar(usuario, modulo, accion, valorAnterior, valorNuevo);
    }

    private void cargarTodasLasFichas(java.util.List<service.FichaClinica> fi) {
        this.limpiarTabla();
        java.util.List<service.FichaClinica> fichas = fi;
        int i = 0;
        for (service.FichaClinica p : fichas) {
            //cargar las fichas clinicas del profesional que ha ingresado al sistema
            if (p.isActivo()) {
                this.agregarFila();
                tablaFichasKine.setValueAt(p.getId(), i, 0);
                tablaFichasKine.setValueAt(p.getPaciente(), i, 1);
                //buscar el nombre del paciente
                service.Paciente pro= (service.Paciente) cargarPaciente(p.getPaciente());
                tablaFichasKine.setValueAt(pro.getNombres()+" "+pro.getApellidoPaterno()+" "+pro.getApellidoMaterno(), i, 2);
                tablaFichasKine.setValueAt(p.getDiagnostico(), i, 3);
                tablaFichasKine.setValueAt(p.getPatologia(), i, 4);
                tablaFichasKine.setValueAt(p.getTratamiento(), i, 5);
                i++;
            }
        }
    }
    
    private static Object cargarPaciente(java.lang.String rut) {
        service.PacienteWS_Service service = new service.PacienteWS_Service();
        service.PacienteWS port = service.getPacienteWSPort();
        return port.cargarPaciente(rut);
    }

    private void ocultarNumeroFicha() {
        tablaFichasKine.getColumnModel().getColumn(0).setMaxWidth(0);
        tablaFichasKine.getColumnModel().getColumn(0).setMinWidth(0);
        tablaFichasKine.getColumnModel().getColumn(0).setPreferredWidth(0);
    }
}
